package org.ueg.pdv.dao;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.ueg.pdv.interfaces.IDao;
import org.ueg.pdv.model.Produto;

@ManagedBean
@SessionScoped
public class DaoProduto extends Dao implements IDao<Produto>, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	public void salva(Produto produto) throws Exception {
		Session session = super.getSession();
		Transaction transaction = session.beginTransaction();
		try{
			session.saveOrUpdate(produto);
			transaction.commit();
		}catch(Exception e){
			transaction.rollback();
			throw e;
		}finally{
			session.close();
		}
	}

	@Override
	public void deleta(Produto object) throws Exception {
		Session session = super.getSession();
		Transaction transaction = session.beginTransaction();
		try{
			session.delete(object);
			transaction.commit();
		}catch(Exception e){
			transaction.rollback();
			throw e;
		}finally{
			session.close();
		}
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Produto> listagem() throws Exception {
		Session session = getSession();
		try{
			Query query = session.createQuery("From Produto");
			return (List<Produto>) query.list();
		}catch(Exception e){
			throw e;
		}finally{
			session.close();
		}
	}

	@Override
	public Produto getById(Produto object) throws Exception {
		Session session = getSession();
		try{
			return (Produto) session.get(Produto.class, object.getId());
		}catch(Exception e){
			throw e;
		}finally{
			session.close();
		}
	}
}